package dataPersistence.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

import common.Result;
import common.ValueResult;

import dataPersistence.dto.ProductContainerDTO;
import dataPersistence.dto.ProductDTO;

public interface IProductDAO {



	/* (non-Javadoc)
	 * @see persistence.DataAccessObject#add(java.lang.Object)
	 */
	public Result add(ProductDTO dto);

	/* (non-Javadoc)
	 * @see persistence.DataAccessObject#update(java.lang.Object)
	 */
	public Result update(ProductDTO dto);

	/* (non-Javadoc)
	 * @see persistence.DataAccessObject#delete(java.lang.Object)
	 */
	public Result delete(ProductDTO dto);

	public ValueResult<Set<ProductDTO>> getAllProducts();

	/**
	 * Added a new entry to the productContainerToProduct table
	 * @param product productDTO
	 * @param containerID string ContaierID
	 */
	public Result addProductToContainer(ProductDTO product,
			String containerID);

	/**
	 * Removes an entry in productContainerToProduct table
	 * @param product productDTO
	 * @param containerID int container id that is to be removed
	 */
	public Result removeProductFromContainer(ProductDTO product,
			String containerID);

	public Result updateProductInContainer(ProductDTO product,
			String oldContainer, String newContainer);
	
	public ValueResult<HashMap<ProductContainerDTO, 
	ArrayList<ProductDTO>>> getAllContainersByProducts();

	public Result removeProductFromSystem(ProductDTO dto);
	



}